package com.itheima.controller;

import com.itheima.anno.Log;
import com.itheima.pojo.*;
import com.itheima.service.ClazzService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RequestMapping("/clazzs")
@Slf4j
@RestController
public class ClazzController {

    @Autowired//自动注入
    private ClazzService clazzService;

    //添加班级
    @Log
    @PostMapping//@RequestBody需要接收一个JSON对象并将其转换为 Java 对象时使用
    public Result add(@RequestBody Clazz clazz) {
        log.info("添加班级信息");
        clazzService.add(clazz);
        return Result.success();
    }
    //查询所有班级
//    这段代码显示所有班级信息，不进行分页。
//    分页查询功能会根据分页参数，分批次显示班级信息
     @GetMapping("/list")
    public Result list() {
         log.info("查询所有班级信息");
         List<Clazz> clazzs = clazzService.list();
         return Result.success(clazzs);

     }

     /*
     班级列表查询
     请求路径：/clazzs
    请求方式：GET 参数格式：queryString
    接口描述：该接口用于班级列表数据的条件分页查询
      */
    @GetMapping//本是需要使用(形式?...),@RequestParam设置默认值将请求参数绑定到方法参数上 但是参数太多所以使用对象接收
    //省略了@RequestParam是因为EmpQueryParam中的属性名和请求参数名一致
    public Result page(ClazzQueryParam clazzQueryParam) {
        log.info("查询班级信息，{}", clazzQueryParam);
        PageResult<Clazz> pageResult = clazzService.page(clazzQueryParam);
        return Result.success(pageResult);
    }

    /*
     删除班级
     */
    @Log
    @DeleteMapping("/{id}")//@PathVariable用于获取url中的参数绑定到方法参数上例如 形式如/items/{id}。
    public Result delete(@PathVariable Long id) {
        log.info("删除班级信息，{}", id);
        clazzService.delete(id);
        return Result.success();
    }

    /*
    根据ID查询班级信息 查询回显
    请求路径：/clazzs/{id}
    请求方式：GET
     */

    @GetMapping("/{id}")///指定了而不是用类是类似/api/search?keyword=Java@RequestParam
    //{id}是一个占位符id是路径变量而keyword叫查询参数，表示一个变量/clazzs/1 @PathVariable
    public Result get(@PathVariable Long id) {
        log.info("查询班级信息，{}", id);
        Clazz clazz = clazzService.get(id);
        return Result.success(clazz);
    }

    /*
    修改班级信息
    请求路径：/clazzs
    请求方式：PUT
     */
    @Log
    @PutMapping
    public Result update(@RequestBody Clazz clazz) {
        log.info("修改班级信息，{}", clazz);
        clazzService.update(clazz);
        return Result.success();
    }

}
